x86/emul: only emulate possibly operand sizes for POPA
authorJan Beulich <jbeulich@suse.com>
Thu, 8 Nov 2012 09:52:32 +0000 (10:52 +0100)
committerJan Beulich <jbeulich@suse.com>
Thu, 8 Nov 2012 09:52:32 +0000 (10:52 +0100)
This opcode neither supports 1-byte operands, nor does it support
8-byte ones (since the opcode is undefined in 64-bit mode). Simplify
the code accordingly.

Signed-off-by: Jan Beulich <jbeulich@suse.com>
Acked-by: Keir Fraser <keir@xen.org>
xen/arch/x86/x86_emulate/x86_emulate.c

index f0ee4891f89cfaa757120368cf309958f0e288d9..462d7c72fd92392302fcac5579874df21f757724 100644 (file)
@@ -1996,13 +1996,10 @@ x86_emulate(
             if ( (rc = read_ulong(x86_seg_ss, sp_post_inc(op_bytes),
                                   &dst.val, op_bytes, ctxt, ops)) != 0 )
                 goto done;
-            switch ( op_bytes )
-            {
-            case 1: *(uint8_t  *)regs[i] = (uint8_t)dst.val; break;
-            case 2: *(uint16_t *)regs[i] = (uint16_t)dst.val; break;
-            case 4: *regs[i] = (uint32_t)dst.val; break; /* 64b: zero-ext */
-            case 8: *regs[i] = dst.val; break;
-            }
+            if ( op_bytes == 2 )
+                *(uint16_t *)regs[i] = (uint16_t)dst.val;
+            else
+                *regs[i] = dst.val; /* 64b: zero-ext done by read_ulong() */
         }
         break;
     }